package pe.gob.osinergmin.interfase_siaf.dac.dao.impl;

import java.util.List;

import javax.sql.DataSource;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper;
import org.springframework.stereotype.Repository;

import pe.gob.osinergmin.interfase_siaf.dac.dao.MaestroClasificadorDao;
import pe.gob.osinergmin.interfase_siaf.dac.domain.MaestroClasificador;

@Repository("maestroClasificadorDao")
public class MaestroClasificadorDaoImpl implements MaestroClasificadorDao {
	
	    private final Log logger = LogFactory.getLog(getClass());
		
		
		private NamedParameterJdbcTemplate jdbcParameterTemplateData;	
		private JdbcTemplate jdbcTemplateData;	
		
		
		
		@Autowired
		public void SetDataSource(DataSource dataSourceData){
			this.jdbcTemplateData = new JdbcTemplate(dataSourceData);
			this.jdbcParameterTemplateData = new NamedParameterJdbcTemplate(dataSourceData);		
		}
		
		
		/**QUERYS**/		
		private static final String SQL_SELECT_IDCLASIFI ="SELECT COUNT(id_clasifi) FROM maestro_clasificador WHERE id_clasifi =:idClasifi";
		
		private static final String SQL_SELECT_NIVELES_CLASIF ="SELECT COUNT(clasificad) FROM maestro_clasificador "
				+ " WHERE ano_eje =:anoEje AND clasificad=:clasificad";
		
		private static final String SQL_SELECT_MAESTRO_CLASIFICADOR ="SELECT id_clasifi,clasificad FROM maestro_clasificador";
		
		private static final String SQL_SELECT_IDCLASIFI_MAESTRO ="SELECT id_clasifi,clasificad FROM maestro_clasificador "
				+ " WHERE ano_eje =:anoEje";
		
		private static final String SQL_SELECT_CLASIFCAD_MAESTRO ="SELECT id_clasifi,clasificad FROM maestro_clasificador "
				+ " WHERE id_clasifi =:idClasifi";
		
		private static final String SQL_SELECT_IDCLASIFI_CLASIFICAD_PARAMETERS ="SELECT id_clasifi,clasificad FROM maestro_clasificador "
				+ " WHERE ano_eje =:anoEje  AND  id_clasifi =:idClasifi";
		
		/**Implementacion de metodos**/
		
		@Override
		public int verificarIdClasifi(MaestroClasificador m) throws Exception {	
			logger.info("ingresando a maestro clasificador"); 
			SqlParameterSource parameters = new BeanPropertySqlParameterSource(m);			
		    return this.jdbcParameterTemplateData.queryForInt(SQL_SELECT_IDCLASIFI, parameters);	
		}
		
		
		@Override
		public int verificarNivClasifi(MaestroClasificador m) throws Exception {	
			logger.info("ingresando a maestro clasificador"); 
			SqlParameterSource parameters = new BeanPropertySqlParameterSource(m);			
		    return this.jdbcParameterTemplateData.queryForInt(SQL_SELECT_NIVELES_CLASIF, parameters);	
		}
		
		
		//@Override
		 public List<MaestroClasificador> listarMaestroClasificadorParameter(MaestroClasificador maestro) throws Exception{		
			 SqlParameterSource parameters = new BeanPropertySqlParameterSource(maestro);
			 RowMapper<MaestroClasificador> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroClasificador.class);
			 if(StringUtils.isNoneBlank(maestro.getAnoEje()) && StringUtils.isNoneBlank(maestro.getIdClasifi())){ 
				 return this.jdbcParameterTemplateData.query(SQL_SELECT_IDCLASIFI_CLASIFICAD_PARAMETERS, parameters, lista);	
			 }else if(StringUtils.isNoneBlank(maestro.getAnoEje())){ 
				 return this.jdbcParameterTemplateData.query(SQL_SELECT_IDCLASIFI_MAESTRO, parameters, lista);	
			 }else if(StringUtils.isNoneBlank(maestro.getIdClasifi())){
				 return this.jdbcParameterTemplateData.query(SQL_SELECT_CLASIFCAD_MAESTRO, parameters, lista);	
			 }else{
				 return null;
			 }			
		 }
		 
		 @Override
		 public List<MaestroClasificador> listarMaestroClasificador() throws Exception{		
			 RowMapper<MaestroClasificador> lista = ParameterizedBeanPropertyRowMapper.newInstance(MaestroClasificador.class);
			 return this.jdbcTemplateData.query(SQL_SELECT_MAESTRO_CLASIFICADOR, lista);
		 }

}
